import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/*
 * @lc app=leetcode.cn id=491 lang=java
 *
 * [491] 递增子序列
 */

// @lc code=start
class Solution {
    List<List<Integer>> res=new ArrayList<>();
    LinkedList<Integer> path=new LinkedList<>();
    public List<List<Integer>> findSubsequences(int[] nums) {
        dfs(nums, 0);
        return res;
    }
    public void dfs(int[] nums,int startIndex){
        if(path.size()>1){//得满足序列长度大于1才收集！
            res.add(new LinkedList<>(path));
        }
        int[] used=new int[201];//默认为0，代表未被使用
        for(int i=startIndex;i<nums.length;i++){
            if(!path.isEmpty()&&nums[i]<path.get(path.size()-1)||
            used[nums[i]+100]==1){//不满足递增序列要求的跳过||同一层已经选过的元素跳过
                continue;
            }
            path.add(nums[i]);
            used[nums[i]+100]=1;//代表同一层是否存在重复的元素，赋值1代表已经使用过
            dfs(nums, i+1);
            path.removeLast();
        }
    }
}
// @lc code=end

